package com.bootdo.reverseproxy.mask;


import org.springframework.stereotype.Component;
import org.apache.commons.lang.StringUtils;

@Component
public class MaskMethod {
    /**
     * 对数字字段进行隐藏处理
     *
     * @param strdata: 脱敏字段
     * @param begin    隐藏初始位置
     * @param size     隐藏位数
     */
    public String baseMask(String strdata, int begin, int size) {
        // 判断数据是否为空
        if (StringUtils.isBlank(strdata) || strdata.contains("null")) {
            return "";
        }
        begin = begin - 1;
        int length = StringUtils.length(strdata);//字段长度
        String str = ""; // 初始化最终返回的结果
        if (size >= length - begin) {
            str = StringUtils.rightPad(StringUtils.left(strdata, begin),
                    length, "*");
        } else {
            str = StringUtils.rightPad(StringUtils.left(strdata, begin),
                    begin + size, "*").concat(
                    StringUtils.right(strdata, length - begin - size));
        }
        return str;
    }

    /**
     * 对出生日期隐藏处理
     */
    public String birthMask(String strdata) {
        String str = ""; // 初始化最终返回的结果
        // 判断数据是否为空
        if (StringUtils.isBlank(strdata) || strdata.contains("null")) {
            return "";
        } else {
            str = StringUtils.rightPad(StringUtils.left(strdata, 11),
                    strdata.length(), "*");
        }
        return str;
    }

    /**
     * 对邮箱进行隐藏处理
     */
    public String emailMask(String strdata, int begin, int size) {
        // 判断数据是否为空
        if (StringUtils.isBlank(strdata) || strdata.contains("null")) {
            return "";
        }
        String msg = strdata.substring(0, strdata.indexOf("@"));
        begin = begin - 1;
        String str = "";
        if (size > msg.length() - begin) {
            str = StringUtils.rightPad(StringUtils.left(strdata, begin),
                    msg.length(), "*").concat(
                    strdata.substring(strdata.indexOf("@")));
        } else {
            str = StringUtils
                    .rightPad(StringUtils.left(strdata, begin),
                            begin + size, "*")
                    .concat(StringUtils.right(msg, msg.length() - begin
                            - size))
                    .concat(strdata.substring(strdata.indexOf("@")));
        }
        return str;
    }

    /**
     * 对学校字段进行隐藏处理
     */
    public String schoolNameMask(String strdata) {
        // 判断数据是否为空
        if (StringUtils.isBlank(strdata) || strdata.contains("null")) {
            return "";
        }
        String part = strdata.substring(8, strdata.length() - 2);
        String str = StringUtils.left(strdata, 8)
                .concat(part.replace(part, StringUtils.repeat("*", part.length())))
                .concat(strdata.substring(strdata.length() - 2));
        return str;
    }

    /**
     * 对姓名进行隐藏处理
     */
    public String nameMask(String strdata) {
        String str = "";
        // 判断数据是否为空
        if (StringUtils.isBlank(strdata) || strdata.contains("null")) {
            return "";
        } else {
            str = StringUtils.rightPad(StringUtils.left(strdata, 6),
                    strdata.length(), "*");
        }
        return str;
    }

    public String adressMask(String strdata) {
        String str = "";
        // 判断数据是否为空
        if (StringUtils.isBlank(strdata) || strdata.contains("null")) {
            return "";
        } else {
            if (strdata.contains("县")) {
                str = StringUtils.rightPad(StringUtils.left(strdata, (strdata.lastIndexOf("县") + 1)),
                        strdata.length(), "*");
            } else if (strdata.contains("市")) {
                str = StringUtils.rightPad(StringUtils.left(strdata, (strdata.lastIndexOf("市") + 1)),
                        strdata.length(), "*");
            } else {
                str = StringUtils.rightPad(StringUtils.left(strdata, 10), strdata.length(), "*");
            }

        }
        return str;
    }
}
